package com.nicolas.pattern.state;

/**
 * ConcreteState（具体状态类）：它是抽象状态类的子类，每一个子类实现一个与环境类的一个状态相关的行为，
 * 每一个具体状态类对应环境的一个具体状态，不同的具体状态类其行为有所不同。
 * @author nicolas  2017年2月13日 -- 下午8:37:44
 * 
 * 正常状态：具体状态类  
 */
public class NormalState extends AccountState {  
    public NormalState(Account acc) {  
        this.acc = acc;  
    }  
  
    public NormalState(AccountState state) {  
        this.acc = state.acc;  
    }  
          
    public void deposit(double amount) {  
        acc.setBalance(acc.getBalance() + amount);  
        stateCheck();  
    }  
      
    public void withdraw(double amount) {  
        acc.setBalance(acc.getBalance() - amount);  
        stateCheck();  
    }  
      
    public void computeInterest()  
    {  
        System.out.println("正常状态，无须支付利息！");  
    }  
      
    //状态转换  
    public void stateCheck() {  
        if (acc.getBalance() > -2000 && acc.getBalance() <= 0) {  
            acc.setState(new OverdraftState(this));  
        }  
        else if (acc.getBalance() == -2000) {  
            acc.setState(new RestrictedState(this));  
        }  
        else if (acc.getBalance() < -2000) {  
            System.out.println("操作受限！");  
        }     
    }     
}
